package com.jinlia.show.modules.system.service;

import com.jinlia.show.modules.base.system.service.SysRoleMenuMapperService;
import com.jinlia.show.modules.system.service.ifc.ISysRoleMenuService;
import lombok.RequiredArgsConstructor;
//import org.springframework.data.redis.core.RedisTemplate;
import org.springframework.stereotype.Service;

import javax.annotation.PostConstruct;
import java.util.Arrays;
import java.util.List;

@Service
@RequiredArgsConstructor
public class SysRoleMenuService extends SysRoleMenuMapperService implements ISysRoleMenuService {

//    private final RedisTemplate<String, Object> redisTemplate;

    /**
     * 初始化权限缓存
     */
    @PostConstruct
    public void initRolePermsCache() {
        refreshRolePermsCache();
    }

    /**
     * 刷新权限缓存
     */
    @Override
    public void refreshRolePermsCache() {
//        // 清理权限缓存
//        redisTemplate.opsForHash().delete(SecurityConstants.ROLE_PERMS_PREFIX, "*");
//
//        List<RolePermsBO> list = this.baseMapper.getRolePermsList(null);
//        if (CollectionUtil.isNotEmpty(list)) {
//            list.forEach(item -> {
//                String roleCode = item.getRoleCode();
//                Set<String> perms = item.getPerms();
//                redisTemplate.opsForHash().put(SecurityConstants.ROLE_PERMS_PREFIX, roleCode, perms);
//            });
//        }
    }

    /**
     * 刷新权限缓存
     */
    @Override
    public void refreshRolePermsCache(String roleCode) {
        // 清理权限缓存
//        redisTemplate.opsForHash().delete(SecurityConstants.ROLE_PERMS_PREFIX, roleCode);
//
//        List<RolePermsBO> list = this.baseMapper.getRolePermsList(roleCode);
//        if (CollectionUtil.isNotEmpty(list)) {
//            RolePermsBO rolePerms = list.get(0);
//            if (rolePerms == null) {
//                return;
//            }
//
//            Set<String> perms = rolePerms.getPerms();
//            redisTemplate.opsForHash().put(SecurityConstants.ROLE_PERMS_PREFIX, roleCode, perms);
//        }
    }

    /**
     * 刷新权限缓存 (角色编码变更时调用)
     */
    @Override
    public void refreshRolePermsCache(String oldRoleCode, String newRoleCode) {
        // 清理旧角色权限缓存
//        redisTemplate.opsForHash().delete(SecurityConstants.ROLE_PERMS_PREFIX, oldRoleCode);
//
//        // 添加新角色权限缓存
//        List<RolePermsBO> list =this.baseMapper.getRolePermsList(newRoleCode);
//        if (CollectionUtil.isNotEmpty(list)) {
//            RolePermsBO rolePerms = list.get(0);
//            if (rolePerms == null) {
//                return;
//            }
//
//            Set<String> perms = rolePerms.getPerms();
//            redisTemplate.opsForHash().put(SecurityConstants.ROLE_PERMS_PREFIX, newRoleCode, perms);
//        }
    }


    /**
     * 获取角色拥有的菜单ID集合
     *
     * @param roleId 角色ID
     * @return 菜单ID集合
     */
    @Override
    public List<Long> listMenuIdsByRoleId(Long  roleId ) {
        List<Long> menuIds = this.baseMapper.listMenuIdsByRoleId(roleId);
        return menuIds;
    }

    @Override
    public List<String> getButtonPermsByRoleIds(Long... roleIds) {
        if (roleIds.length == 0) {
            return Arrays.asList();
        }
        return this.baseMapper.getButtonPermsByRoleIds(roleIds);
    }
}
